package janala.logger; import janala.logger.inst.*; import janala.config.Config; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; public class FileLogger extends AbstractLogger { private ObjectOutputStream outputStream; private class LoggerThread extends Thread { @Override public void run() { try { outputStream.close(); outputStream = new ObjectOutputStream(new FileOutputStream(Config.instance.traceAuxFileName)); outputStream.writeObject(ClassNames.getInstance()); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } public FileLogger() { try { outputStream = new ObjectOutputStream(new FileOutputStream(Config.instance.traceFileName)); Runtime.getRuntime().addShutdownHook(new LoggerThread()); } catch (IOException e) { e.printStackTrace(); System.exit(1); } } @Override protected void log(Instruction insn) { if (Config.instance.printTrace) System.out.println(insn); try { outputStream.writeObject(insn); } catch (IOException e) { e.printStackTrace(); System.exit(1); } } }